package com.example.mq.mqserver.core;

import lombok.Data;

import java.io.Serializable;
import java.util.UUID;

//包含属性部分和内容部分
//需要支持序列化
@Data
public class Message implements Serializable {
    private BasicProperties basicProperties = new BasicProperties();
    private byte[] body;

    //辅助属性
    //这两个属性不需要序列化
    //一个文件存储很多消息 找到某个消息使用下面两个偏移量来找到消息 前闭后开[)
    //文件开头到消息数据的位置偏移
    private transient long offsetBeg = 0;
    //文件结尾到消息数据的位置偏移
    private transient long offsetEnd = 0;

    //使用这个属性表示该消息在文件中是否为有效消息(逻辑删除)
    //0x1有效 0x0无效
    private byte isValid = 0x1;

    //创建工厂方法 让工厂方法帮我们封装一下message对象的过程
    //万一两个参数冲突 一外面的为主
    public static Message createMessageWithId(String routingKey, BasicProperties basicProperties, byte[] body){
        Message message = new Message();
        if(basicProperties != null){
            message.setBasicProperties(basicProperties);
        }
        //M-为前缀 和其他uuid做区分
        message.setMessageId("M-" + UUID.randomUUID().toString());
        message.basicProperties.setRoutingKey(routingKey);
        message.body = body;
        //此处是吧body和basicPro设置出来 其他属性暂时不设置
        return message;
    }

    //获取messageId
    public String getMessageId(){
        return basicProperties.getMessageId();
    }
    //设置messageId
    public void setMessageId(String messageId){
        basicProperties.setMessageId(messageId);
    }

     public String getRoutingKey(){
        return basicProperties.getRoutingKey();
     }

     public void setRoutingKey(String routingKey){
        basicProperties.setRoutingKey(routingKey);
     }

     public int getDeliverMode(){
        return basicProperties.getDeliverMode();
     }

     public void setDeliverMode(int mode){
        basicProperties.setDeliverMode(mode);
     }
}
